package com.hyt.it.ogt.kq.service.gov.service;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.hyt.it.ogt.kq.common.config.exception.KqException;
import com.hyt.it.ogt.kq.common.gov.utils.tree.Tree;
import com.hyt.it.ogt.kq.service.gov.model.param.BmBindParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.TimeRoomCandidateVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.overview.ExamManageCollectVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.overview.ExamMonitorCollectVO;
import com.hyt.it.ogt.kq.service.model.entity.TaskCandidateArea;
import com.hyt.it.ogt.kq.service.model.param.PushCandidateSubjectParam;
import com.hyt.it.ogt.kq.service.model.vo.candidateSubject.BmTaskData;
import com.hyt.it.ogt.kq.service.model.vo.candidateSubject.OverviewBmSubjectVO;
import com.hyt.it.ogt.kq.service.model.vo.candidateSubject.OverviewBmVO;

/**
 * <p>
 * 任务总览
 * </p>
 *
 * @author liuq
 * @since 2021-08-26
 */
public interface ITaskOverviewService {

	/**
	 * 获取报名信息
	 * @param taskId
	 * @return
	 */
    OverviewBmVO getBmInfo(String taskId, String officeId);

	/**
	 * 获取报名树
	 * @return
	 */
	List<Tree> getBmTree();

	/**
	 * 绑定报名
	 * @param param
	 */
	void bindBm(BmBindParam param);

	/**
	 * 解绑报名
	 * @param param
	 */
	@Transactional(rollbackFor = Exception.class)
	void unbindBm(BmBindParam param,String officeId) throws Exception;

	/**
	 * 查询科目报名人数统计数据
	 * @param taskId
	 * @return
	 */
	List<OverviewBmSubjectVO> getBmSubjectVO(String taskId);
	
	/**
	 * 绑定云考试报名
	 * @param taskId 考试任务id
	 * @param projectId 报名项目id
	 * @param bmTaskData 云考试报名数据
	 */
	void bindBm(String taskId, String projectId, BmTaskData bmTaskData);
	
	/**
	 * 解绑云考试报名
	 * @param taskId 考试任务id
	 */
	void unbindBm(String taskId);
	

	/**
	 * 获取考试管理数据
	 * @param taskId
	 * @return
	 */
	ExamManageCollectVO getExamManageData(String taskId);

	/**
	 * 获取考试监控数据
	 * @param taskId
	 * @param timeId
	 * @return
	 */
	ExamMonitorCollectVO getExamMonitorData(String taskId, String timeId);

	
    @Transactional(rollbackFor = {Exception.class})
    Boolean pushCandidateSubject(PushCandidateSubjectParam param) throws KqException;

	/**
	 *获取准考证信息
	 * @param projectId
	 * @param studentId
	 * @return
	 */
	List<TimeRoomCandidateVO> getAdmissionInfo(String projectId, String studentId);

	/**
	 * 组装区域信息并保存
	 * @param areas
	 */
	void assemblingAreaSave(List<TaskCandidateArea> areas);

}
